home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / psk130.lzh / EDEMO.C < prev    next >
C/C++ Source or Header  |  1993-02-18  |  3KB  |  147 lines

  1. /*
  2.     edemo.C
  3.  
  4.     Event Handler Demonstration
  5.  
  6.     Copyright (C) 1993, Geoff Friesen B.Sc.
  7.     All rights reserved.
  8.  
  9.     Borland C++ 3.1
  10. */
  11.  
  12. #include <dos.H>
  13. #include <process.H>
  14. #include <stdio.H>
  15. #include <stdlib.H>
  16. #include <time.H>
  17.  
  18. #include "event.H"
  19. #include "kbd.H"
  20. #include "mouse.H"
  21. #include "video.H"
  22.  
  23. int rows = 25;
  24. int cattr = (BLUE << 4) | WHITE;
  25. int bwattr = LIGHTGRAY << 4;
  26.  
  27. void cleanup (void);
  28.  
  29. void main (int argc, char **argv)
  30. {
  31.    event e;
  32.    int adaptor = v_aa (), x, y;
  33.  
  34.    if (_osmajor < 3 || _osmajor == 3 && _osminor < 30)
  35.    {
  36.        fprintf (stderr, "edemo: invalid DOS version number - "
  37.             "needs 3.30+\n");
  38.        exit (ERROR);
  39.    }
  40.  
  41.    if (argc > 2 ||
  42.        argc == 2 && (rows = atoi (argv [1])) != 43 && rows != 50)
  43.    {
  44.        fprintf (stderr, "edemo: invalid command line\n");
  45.        exit (ERROR);
  46.    }
  47.  
  48.    atexit (cleanup);
  49.    v_setattr ((v_setup (rows) == C80) ? cattr : bwattr);
  50.    rows = v_getrows ();
  51.  
  52.    v_cursor (CHIDE);
  53.    v_clear(1, 1, 80, rows);
  54.    v_border (DOUBLE_LINE, 1, 1, 80, rows-1);
  55.    v_gotoxy (1, rows);
  56.    v_cputs ("EDEMO ■ Event DEMOnstration ■ Press S to suspend");
  57.    v_gotoxy (73, rows);
  58.    v_cputs ("F10-Exit");
  59.  
  60.    if (e_init (100) == ERROR)
  61.    {
  62.        fprintf (stderr, "edemo: unable to install event handler\n");
  63.        exit (ERROR);
  64.    }
  65.  
  66.    mrowrange (0, (rows-1)*8);    /* set maximum row (8 pixels/row) */
  67.    mmoveto (0, 0);
  68.  
  69.    (void) e_settimer (0, 3);
  70.    (void) e_settimer (5, 40);
  71.  
  72.    (void) e_flush ();
  73.    (void) e_show ();
  74.  
  75.    randomize();
  76.  
  77.    while (1)
  78.    {
  79.       (void) e_fetch (&e);
  80.  
  81.       if (e.type == KEY && e.parm1 == F10)    /* keystroke exit */
  82.       break;
  83.  
  84.       if (e.type == KEY && e.parm1 == 'S' ||
  85.       e.type == MOUSE && (e.parm1 & ME_LBP) &&
  86.       (e.parm3 >> 3) == 36 && (e.parm4 >> 3) == rows-1)
  87.       {
  88.       (void) e_suspend ();
  89.       sleep (3);
  90.       (void) e_flush ();
  91.       (void) e_resume ();
  92.       continue;
  93.       }
  94.  
  95.       if (e.type == MOUSE && (e.parm1 & ME_LBP))
  96.       {
  97.       e.parm3 >>= 3;
  98.       e.parm4 >>= 3;
  99.       if (e.parm3 >= 72 && e.parm4 == rows-1)
  100.           break;
  101.       else
  102.           continue;
  103.       }
  104.  
  105.       if (e.type == TIMER && e.parm1 == 5)
  106.       {
  107.       if (adaptor != MDA)
  108.           v_setattr ((1+random(7)) << 4);
  109.       (void) e_hide ();
  110.       v_clear(2, 2, 78, rows-3);
  111.       (void) e_show ();
  112.       continue;
  113.       }
  114.  
  115.       if (e.type == TIMER && e.parm1 == 0)
  116.       {
  117.       x = 2+random(74);
  118.       y = 2+random(rows-3);
  119.  
  120.       v_gotoxy (x, y);
  121.       (void) e_hide ();
  122.       v_cputs ("EDEMO");
  123.       (void) e_show ();
  124.       continue;
  125.       }
  126.    }
  127.  
  128.    (void) e_hide ();
  129.    (void) e_close ();
  130.  
  131.    exit (OK);
  132. }
  133.  
  134. void cleanup (void)
  135. {
  136.    int frequency;
  137.  
  138.    for (frequency = 100; frequency < 1500; frequency += 100)
  139.    {
  140.     sound (frequency);
  141.     delay (50);
  142.    }
  143.  
  144.    nosound ();
  145.  
  146.    v_cleanup ();
  147. }